package junit.tests; import junit.framework.TestCase; import junit.framework.TestResult; /** * A test case testing the testing framework. * */ public class TestCaseTest extends TestCase { static class TornDown extends TestCase { boolean fTornDown= false; TornDown(String name) { super(name); } protected void tearDown() { fTornDown= true; } protected void runTest() { throw new Error(); } } public TestCaseTest(String name) { super(name); } public void testCaseToString() { // This test wins the award for twisted snake tail eating while // writing self tests. And you thought those weird anonymous // inner classes were bad... assertEquals("testCaseToString(junit.tests.TestCaseTest)", toString()); } public void testError() { TestCase error= new TestCase("error") { protected void runTest() { throw new Error(); } }; verifyError(error); } public void testRunAndTearDownFails() { TornDown fails= new TornDown("fails") { protected void tearDown() { super.tearDown(); throw new Error(); } protected void runTest() { throw new Error(); } }; verifyError(fails); assertTrue(fails.fTornDown); } public void testSetupFails() { TestCase fails= new TestCase("success") { protected void setUp() { throw new Error(); } protected void runTest() { } }; verifyError(fails); } public void testSuccess() { TestCase success= new TestCase("success") { protected void runTest() { } }; verifySuccess(success); } public void testFailure() { TestCase failure= new TestCase("failure") { protected void runTest() { fail(); } }; verifyFailure(failure); } public void testTearDownAfterError() { TornDown fails= new TornDown("fails"); verifyError(fails); assertTrue(fails.fTornDown); } public void testTearDownFails() { TestCase fails= new TestCase("success") { protected void tearDown() { throw new Error(); } protected void runTest() { } }; verifyError(fails); } public void testTearDownSetupFails() { TornDown fails= new TornDown("fails") { protected void setUp() { throw new Error(); } }; verifyError(fails); assertTrue(!fails.fTornDown); } public void testWasRun() { WasRun test= new WasRun(""); test.run(); assertTrue(test.fWasRun); } void verifyError(TestCase test) { TestResult result= test.run(); assertTrue(result.runCount() == 1); assertTrue(result.failureCount() == 0); assertTrue(result.errorCount() == 1); } void verifyFailure(TestCase test) { TestResult result= test.run(); assertTrue(result.runCount() == 1); assertTrue(result.failureCount() == 1); assertTrue(result.errorCount() == 0); } void verifySuccess(TestCase test) { TestResult result= test.run(); assertTrue(result.runCount() == 1); assertTrue(result.failureCount() == 0); assertTrue(result.errorCount() == 0); } }